package LMR.rbac.view;

import LMR.rbac.dto.Deptdto;
import LMR.rbac.service.Deptservice;
import LMR.rbac.vo.DeptVo;
import LMR.rbac.vo.Result;


public class Deptview {
    public static DeptVo[] cache;

    public static void show() {
        String menuChoice;
        do {
            printMenu();
            menuChoice = Mainview.input.nextLine();
            switch (menuChoice) {

                case "0"->
                    System.out.println("已返回上一级菜单！");
                case "1"->
                    list();
                case "2"->
                    create();
                case "3"->
                    update();
                case "4"->
                    delete();
                default->
                    System.out.println("输入非法，请输入正确的菜单编号！");
            }
        } while (!"0".equals(menuChoice));
    }


    public static void printMenu() {
        String menu = """
                ---------------
                    部门管理
                ---------------
                |  0  返回上级  |
                |  1  部门列表  |
                |  2  创建部门  |
                |  3  更新部门  |
                |  4  删除部门  |
                ---------------
                请输入选项：""";

        System.out.print(menu);


    }
    public static void printError(String message) {
        System.out.println("\033[31m"+message+"\033[0m");
    }
    public static void list(){
        Result result=Deptservice.list();
        cache=(DeptVo[]) result.data;
        System.out.println("ID\t部门名称\t部门电话");
        for (DeptVo dept : cache){
            System.out.printf("%d\t%s\t%s\n",dept.id,dept.name,dept.phone);
        }
    }
    public static void create(){
        System.out.print("请输入部门名称：");
        String name=Mainview.input.nextLine();
        System.out.print("请输入部门电话：");
        String phone=Mainview.input.nextLine();
        Deptdto dto=new Deptdto(name,phone);
        Result result= Deptservice.create(dto);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static void update(){
        DeptVo dept=getCachceById();
        if (dept==null){
            return;
        }
        System.out.print("请输入部门名称：按回车不修改:");
        String name=Mainview.input.nextLine();
        name="".equals(name)?dept.name:name;
        System.out.print("请输入部门电话：按回车不修改:");
        String phone=Mainview.input.nextLine();
        phone="".equals(phone)?dept.phone:phone;
        Deptdto dto=new Deptdto(name,phone);
        Result result= Deptservice.update(dto,dept.id);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static void delete(){
        DeptVo dept=getCachceById();
        if (dept==null){
            return;
        }
        System.out.print("是否删除该数据？y/n:");
        String choice=Mainview.input.nextLine();
        if (!"y".equalsIgnoreCase(choice)){
            System.out.println("已取消删除！");
            return;
        }
        Result result= Deptservice.delete(dept.id);
        if (!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
    }
    public static DeptVo getCachceById(){
        System.out.print("请输入部门ID,ID必须大于0且是整数:");
        if (!Mainview.input.hasNextInt()){
            Mainview.input.nextLine();
            printError("输入非法，请输入正确的部门ID");
            return null;
        }
        int id=Integer.parseInt(Mainview.input.nextLine());
        if (id<1){
            printError("输入非法，请输入正确的部门ID");
            return null;
        }
        if (cache==null){
            Result result=Deptservice.list();
            cache=(DeptVo[]) result.data;
        }
        DeptVo dept=null;
        for (DeptVo deptVo:cache){
            if (deptVo.id==id){
                dept=deptVo;
                System.out.println("该ID对应的数据是：");
                System.out.printf("ID：%d,名称：%s,电话：%s\n",deptVo.id,deptVo.name,deptVo.phone);
                break;
            }

        }
        if (dept==null){
            printError("没有该ID对应的数据");
            return null;
        }
        return dept;
    }
}
